package com.example.design.c.state.demo3;

import lombok.Getter;
import lombok.Setter;

/**
 * 线程类上下文
 */
@Setter
@Getter
public class ThreadContext {

    /**
     * 构造方法初始化线程状态
     */
    public ThreadContext() {
        this.state = new StateNew();
    }

    /**
     * 线程当前状态
     */
    private ThreadAbstractState state;

    /**
     * 线程启动
     *
     * @return true 转换为就绪状态
     */
    public boolean start() {
        return state.start(this);
    }

    /**
     * 获取线程当前时间
     * 模拟线程运行逻辑
     * 用来表示当前线程状态为正在运行状态
     *
     * @return 转换为运行状态
     */
    public boolean getCPU() {
        return state.getCPU(this);
    }

    /**
     * 线程停止
     *
     * @return 转换为死亡状态
     */
    public boolean stop() {
        return state.stop(this);
    }

    /**
     * 线程阻塞
     *
     * @return 转换为阻塞状态
     */
    public boolean suspend() {
        return state.suspend(this);
    }

    /**
     * 线程复位
     *
     * @return 转换为就绪状态
     */
    public boolean resume() {
        return state.resume(this);
    }

    /**
     * 显示当前状态名称
     */
    public void showState() {
        System.out.println("当前线程状态: " + this.state.getStateName());
    }
}
